جزوه · فصل هفتم · جلسه ۷۲ · مدیریت زمان در لینوکس ← بازگشت به فهرست
📘 فصل هفتم · جلسه ۷۲ مدیریت زمان در لینوکس
📅 تاریخ: دوشنبه، ۲ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
مدیریت زمان یکی از مباحث مهم در LPIC (بخش ۱۰۴) است. مفاهیم Epoch، زمان سخت‌افاری و سیستمی، hwclock، timedatectl و NTP حتماً در آزمون می‌آیند.
🕐 قبل از شروع، یه مثال ساده:

فرض کن ساعت مچی داری که گاهی جلو یا عقب می‌افته. باید وقتش رو درست کنی. توی لینوکس هم همینطوره! سیستم‌ها دو نوع زمان دارند: زمان سخت‌افاری (RTC) که روی مادربرد ذخیره می‌شود و زمان سیستمی (System Time) که در حین کار استفاده می‌شود. توی این جلسه یاد می‌گیری چطور هر دو رو مدیریت کنی و با سرورهای زمان هماهنگ کنی.

▍ مبداء زمان (Epoch) در کامپیوترها

در سیستم‌های کامپیوتری، زمان از یک نقطه شروع به نام مبداء زمان (Epoch) محاسبه می‌شود. این مبداء در سیستم‌های یونیکس و لینوکس، January 1, 1970 است. از این زمان به بعد، تعداد ثانیه‌های گذشته شمارش می‌شود و به عنوان زمان جاری در نظر گرفته می‌شود.

┌──(ya3in㉿kali)-[~] └─$ date +%s 1724592000

توضیح: date +%s تعداد ثانیه‌های گذشته از ۱۹۷۰/۰۱/۰۱ تا لحظه حال را نمایش می‌دهد. به این عدد، Timestamp یا Unix Time گفته می‌شود.

مبداء زمان در لینوکس: January 1, 1970 (معروف به Unix Epoch).

▍ دو نوع زمان در لینوکس

🔵 زمان سخت‌افاری (RTC / Hardware Clock)

  • زمان ذخیره‌شده روی مادربرد (باتری CMOS).
  • حتی وقتی سیستم خاموش است، این زمان ادامه دارد.
  • معمولاً با UTC (زمان جهانی) تنظیم می‌شود.
  • دستور مدیریت: hwclock

🟢 زمان سیستمی (System Clock)

  • زمانی که سیستم‌عامل در حال اجرا استفاده می‌کند.
  • بر اساس زمان سخت‌افاری در زمان بوت تنظیم می‌شود.
  • با منطقه زمانی (Timezone) تنظیم می‌شود.
  • دستورات مدیریت: date و timedatectl
تفاوت اصلی: زمان سخت‌افاری روی مادربرد است (حتی در زمان خاموشی)، اما زمان سیستمی در حین کار سیستم استفاده می‌شود.

▍ دستور date (زمان سیستمی)

date برای نمایش و تنظیم زمان سیستمی استفاده می‌شود.

• نمایش زمان

┌──(ya3in㉿kali)-[~] └─$ date Tue Sep 2 14:30:45 +0330 2025

• نمایش با فرمت دلخواه

┌──(ya3in㉿kali)-[~] └─$ date "+%Y-%m-%d %H:%M:%S" 2025-09-02 14:30:45
date زمان سیستمی را نشان می‌دهد، نه زمان سخت‌افاری.

▍ دستور hwclock (زمان سخت‌افاری)

hwclock برای نمایش و مدیریت زمان سخت‌افاری (RTC) استفاده می‌شود. این دستور زمان ذخیره‌شده روی مادربرد را نشان می‌دهد.

• نمایش زمان سخت‌افاری

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock 2025-09-02 14:30:45.123456+0330

• نمایش زمان سخت‌افاری به صورت UTC

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock --utc 2025-09-02 11:00:45.123456+0000

• نمایش زمان سخت‌افاری به صورت محلی (Local)

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock --localtime 2025-09-02 14:30:45.123456+0330
تفاوت --utc و --localtime:
  • --utc → زمان را به صورت UTC نمایش می‌دهد (زمان جهانی).
  • --localtime → زمان را با منطقه زمانی محلی نمایش می‌دهد.

• تنظیم زمان سخت‌افاری

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock --set --date="2025-09-02 14:30:00"

توضیح: زمان سخت‌افاری را به تاریخ و زمان مشخص شده تنظیم می‌کند.

• هماهنگ‌سازی زمان سخت‌افاری با زمان سیستمی

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock --systohc

توضیح: زمان سخت‌افاری را با زمان سیستمی هماهنگ می‌کند (زمان سیستمی را روی مادربرد ذخیره می‌کند).

┌──(ya3in㉿kali)-[~] └─$ sudo hwclock --hctosys

توضیح: زمان سیستمی را با زمان سخت‌افاری هماهنگ می‌کند (زمان سخت‌افاری را به سیستم می‌دهد).

⚠️ توجه:

برای استفاده از hwclock به دسترسی root نیاز دارید. از sudo استفاده کنید.

▍ جدول خلاصه گزینه‌های hwclock

گزینه توضیح
--show نمایش زمان سخت‌افاری (پیش‌فرض)
--set --date="YYYY-MM-DD HH:MM:SS" تنظیم زمان سخت‌افاری به تاریخ و زمان مشخص
--systohc هماهنگ‌سازی زمان سخت‌افاری با زمان سیستمی
--hctosys هماهنگ‌سازی زمان سیستمی با زمان سخت‌افاری
--utc نمایش/تنظیم زمان به صورت UTC
--localtime نمایش/تنظیم زمان به صورت محلی
گزینه‌های مهم hwclock: --systohc (ذخیره زمان سیستمی در سخت‌افزار) و --hctosys (خواندن زمان سخت‌افاری و تنظیم سیستم).

▍ دستور timedatectl (مدیریت زمان سیستم)

timedatectl ابزاری مدرن برای مدیریت زمان در سیستم‌های با systemd است.

• نمایش وضعیت زمان

┌──(ya3in㉿kali)-[~] └─$ timedatectl Local time: Tue 2025-09-02 14:30:45 +0330 Universal time: Tue 2025-09-02 11:00:45 UTC RTC time: Tue 2025-09-02 14:30:45 Time zone: Asia/Tehran (+0330, +0330) System clock synchronized: yes NTP service: active RTC in local TZ: no

• تنظیم زمان سیستمی

┌──(ya3in㉿kali)-[~] └─$ sudo timedatectl set-time "2025-09-02 15:00:00"

توضیح: زمان سیستمی را به تاریخ و زمان مشخص تنظیم می‌کند.

• فعال/غیرفعال کردن NTP

┌──(ya3in㉿kali)-[~] └─$ sudo timedatectl set-ntp true └─$ sudo timedatectl set-ntp false

توضیح: true فعال‌سازی و false غیرفعال‌سازی هماهنگ‌سازی خودکار زمان با NTP.

با timedatectl set-ntp 0 نیز می‌توان NTP را غیرفعال کرد (0 به معنای خاموش).

▍ تنظیم منطقه زمانی (Timezone)

منطقه زمانی مشخص می‌کند که سیستم با کدام منطقه زمانی کار کند.

• مشاهده لیست مناطق زمانی

┌──(ya3in㉿kali)-[~] └─$ timedatectl list-timezones

توضیح: لیست تمام مناطق زمانی موجود را نمایش می‌دهد (با استفاده از less می‌توانید مرور کنید).

• تنظیم منطقه زمانی

┌──(ya3in㉿kali)-[~] └─$ sudo timedatectl set-timezone Asia/Tehran

توضیح: منطقه زمانی را به تهران تغییر می‌دهد.

• تنظیم منطقه زمانی با لینک سمبلیک (روش قدیمی)

┌──(ya3in㉿kali)-[~] └─$ sudo ln -sf /usr/share/zoneinfo/Asia/Tehran /etc/localtime

توضیح: با ایجاد لینک سمبلیک به فایل منطقه زمانی، زمان محلی را تغییر می‌دهد. این روش قدیمی است و timedatectl روش مدرن‌تر.

روش‌های تنظیم منطقه زمانی:
  • جدید: timedatectl set-timezone Asia/Tehran
  • قدیمی: ln -sf /usr/share/zoneinfo/Asia/Tehran /etc/localtime

▍ پروتکل NTP (Network Time Protocol)

NTP پروتکلی برای هماهنگ‌سازی زمان بین سیستم‌ها از طریق شبکه است. این پروتکل از یک ساختار طبقه‌ای (Stratum) استفاده می‌کند:

🔑 مزیت NTP: سیستم شما می‌تواند زمان خود را با یک سرور زمان معتبر هماهنگ کند و همیشه زمان دقیقی داشته باشد.

• فعال‌سازی NTP در لینوکس

┌──(ya3in㉿kali)-[~] └─$ sudo timedatectl set-ntp true

توضیح: این دستور هماهنگ‌سازی خودکار زمان را فعال می‌کند.

نکته: برای استفاده از NTP در سیستم‌های قدیمی، باید بسته ntp یا chrony را نصب کنید. در سیستم‌های مدرن با systemd، timedatectl set-ntp true کافی است.
✅ جمع‌بندی نهایی برای امتحان:
  • مبداء زمان (Epoch): January 1, 1970
  • date +%s: نمایش تعداد ثانیه‌های گذشته از Epoch
  • دو نوع زمان: سخت‌افاری (RTC) و سیستمی (System Clock)
  • hwclock: مدیریت زمان سخت‌افاری
  • گزینه‌های hwclock: --systohc (ذخیره در سخت‌افزار)، --hctosys (خواندن از سخت‌افزار)
  • timedatectl: مدیریت زمان سیستمی و NTP
  • timedatectl set-ntp true/false: فعال/غیرفعال کردن NTP
  • منطقه زمانی: timedatectl set-timezone Asia/Tehran
  • روش قدیمی: ln -sf /usr/share/zoneinfo/Asia/Tehran /etc/localtime